import {
  request
} from '@/utils/http.js'; // 微信浏览器检测
// 导入API
import {
  loginApi
} from './api.js';
export const isWechatBrowser = () => {
  // 先检查 navigator 是否存在，避免非浏览器环境报错
  if (typeof navigator === 'undefined') {
    return false;
  }
  return /micromessenger/i.test(navigator.userAgent);
};
// 处理登录逻辑 - 修改为实际后端接口调用
export const handleLogin = async (code) => {
  try {
    // 使用新的API封装
    const data = await loginApi.wechatLogin(code);
    const {
      token,
      userInfo
    } = data;

    // 存储登录状态
    uni.setStorageSync('token', token);
    // uni.setStorageSync('userInfo', userInfo);
    return true;
  } catch (error) {
    console.error('登录失败:', error);
    return false;
  }
};


/**
 * 获取微信授权code（修改为生成URL而非直接跳转）
 */
export function getWechatCode() {
  if (!isWechatBrowser()) {
    uni.showToast({
      title: '请在微信浏览器中打开',
      icon: 'none',
      duration: 3000
    });
    return false;
  }
  return getWechatAuthUrl();
}

// 登录状态检查函数 - 检查本地存储中是否有token
/**
 * 检查登录状态
 * 由于后端无 /verify-token 接口，暂时仅通过本地存储判断登录状态
 */
export function checkLoginStatus() {
  return new Promise((resolve) => {
    // 仅检查本地存储中是否存在 token 和 userInfo
    const token = uni.getStorageSync('token');

    // 同时存在视为已登录
    resolve(!!(token));
  });
}


/**
 * 处理微信授权回调，使用code获取token
 * @param {string} code - 微信授权返回的code
 * @param {string} state - 微信授权返回的state
 * @returns {Promise<{success: boolean}
 */
// , userInfo: object|null}>
export async function handleWechatCallback(code, state) {
  try {
    // 清除可能存在的旧令牌
    uni.removeStorageSync('token');
    // uni.removeStorageSync('userInfo');


    // 调用登录接口
    const response = await request({
      url: '/login',
      method: 'POST',
      data: {
        code: code
      }
    });
    const {
      code: resCode,
      msg,
      token
    } = response;

    if (resCode !== 200 && resCode !== 0) {
      uni.showToast({
        title: msg || '登录失败',
        icon: 'error'
      });
      // 关键修改：使用replace方法实现无历史记录跳转
      if (msg && msg.includes('验证码已失效') && typeof window !== 'undefined') {
        setTimeout(() => {
          // 使用replace替代href赋值，避免新增历史记录
          window.location.replace(getWechatAuthUrl());
        }, 1500);
      }
      return false;
    }

    // 业务状态码正确时才存储令牌
    uni.setStorageSync('token', token);
    // 可根据需要添加用户信息获取逻辑或删除相关代码

    // 添加URL参数清理逻辑
    if (typeof window !== 'undefined') {
      // 直接构造干净URL，避免URL对象潜在的兼容性问题
      const cleanUrl = window.location.origin + window.location.pathname + window.location.hash;
      // 双重保障：先删除参数再替换状态
      window.history.replaceState({}, document.title, cleanUrl);
      // 额外添加参数删除（针对微信浏览器特殊情况）
      window.location.hash = window.location.hash; // 触发hashchange事件刷新
    }
    return true;
  } catch (err) {
    console.error('登录处理异常:', err);
    uni.showToast({
      title: '登录异常',
      icon: 'error'
    });
    return false;
  }
}

/**
 * 获取URL参数（仅浏览器环境）
 * @param {string} [name] - 可选参数名，不提供则返回所有参数对象
 * @returns {string|null|Object} 参数值或包含所有参数的对象
 */
export function getQueryString(name) {
  // 仅保留浏览器环境处理
  if (typeof window !== 'undefined' && window.location && window.location.search) {
    const search = window.location.search.substr(1);
    const params = {};

    // 解析所有查询参数到对象
    search.split('&').forEach(item => {
      const [key, value] = item.split('=');
      if (key) params[key] = decodeURIComponent(value || '');
    });

    // 如果指定了参数名则返回对应值，否则返回整个对象
    return name ? params[name] || null : params;
  }

  // 无查询参数时返回空对象而非null
  return name ? null : {};
}

/**
 * 生成微信授权URL
 */
export function getWechatAuthUrl() {
  const appid = 'wxa47bca44e4bee30a';
  let redirectUri;

  if (typeof window !== 'undefined') {
    // 确保回调URL始终不包含任何参数
    redirectUri = encodeURIComponent(window.location.origin + window.location.pathname);
  }
  console.log('redirectUri', redirectUri);

  const state = 'STATE_' + new Date().getTime() + Math.random().toString(36).substr(2, 5);
  uni.setStorageSync('authState', state);

  // 使用replace方式跳转授权页面
  const authUrl =
    `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appid}&redirect_uri=${redirectUri}&response_type=code&scope=snsapi_base&state=${state}#wechat_redirect`;

  return authUrl;
}